#pragma once
#ifndef STARANDMAP_H
#define STARANDMAP_H

#include <iostream>
#include <cmath>
#include <QPushButton>
#include <QIcon>
#include <QLabel>
class debugwindow;
#include "debugwindow.h"

using namespace std;

class civ;
class star: public QPushButton
{
public:
    int selected=0;
    int x;//x坐标
    int y;//y坐标
    int n;//星系序号
    int res, poplim;//自然属性（资源基础数量，人口基础上限）
    int pr;//实际生产资源
    int def;//星系军事实力
    void change();
    QIcon button_icon;//添加图标
    star();
    int pop=0;
    int natural_value;//殖民优先程度
    int owned=0;//是否被一个文明占领
    int colonizing=0;//正在被殖民
    civ *owner=NULL;//星系的占领者
    debugwindow *debugwindow;//数据显示窗口
    double growth=0;
    void select();
};

class civ
{
public:
    int num;//文明编号
    int destroyed = 0;//是否已经灭亡
    civ(int t);
    star** own;//拥有的星系（指针
    star** observed;//可观测星系（指针
    civ();
    int owned=0;//拥有星系数
    double income=0;//资源结余
    int resource=0;//总资源数
    int total_pop=0;//总人口
    int observe=0;//总可观测星系
    double science=1;//科技指数
    double pop_upkeep=0.5;//基础人口维护费
    QIcon *I;
    void icon_set();
    void nextTurn();//回合操作
    void balance();//获取结余资源
    void repaint();//给星系换颜色
    void expand();//扩张
    void population();//人口核算与增长
    ~civ()
    {
        delete *own;
        delete *observed;
        delete I;
    }
};

class Map
{
public:
    int height=600, length=900;
    int n_stars;//星系数量
    int n_civ;//初始文明数
    star* s;//星系数组
    Map(int a,int b);
    void mapgen(int a);//生成随机星图
    civ *c;//文明数组
    void civdis(int a,int b);//文明随机分布
    void observe();//重新分配视野
};

#endif // STARANDMAP_H
